// API: 系统管理相关接口（学院/专业/班级/课程/处分）
import { apiClient } from '@/utils/require'

/**
 * 类型定义
 */
export interface College {
  id: number
  college_name: string
}

export interface Major {
  id: number
  major_name: string
  college?: number
  college_name?: string
}

export interface Classes {
  id: number
  class_name: string
  teacher?: number
  teacher_name?: string
  major?: number
  major_name?: string
}

export interface Course {
  id: number
  course_name: string
  major?: number
  major_name?: string
  teacher_name?: string
}

export interface Punish {
  id: number
  sort: string
  name: string
  ranks: string
  grade?: number
  teacher?: number
  teacher_name?: string
  student?: number
  student_name?: string
  time?: number
  created_at: string
}

export interface PunishDict {
  id: number
  sort: string
  name: string
  ranks: string
  grade: number
}

export interface PaginatedResponse<T> {
  count: number
  next: string | null
  previous: string | null
  results: T[]
}

/**
 * 学院管理API
 * 
 * 接口：GET|POST|PUT|DELETE /api/colleges/
 * 权限：查看-所有用户，修改-仅管理员
 */
export const collegeAPI = {
  /** 获取学院列表 */
  getList: (params?: any) => apiClient.get<PaginatedResponse<College>>('/colleges/', { params }),
  /** 获取学院详情 */
  getDetail: (id: number) => apiClient.get<College>(`/colleges/${id}/`),
  /** 创建学院（仅管理员） */
  create: (data: Omit<College, 'id'>) => apiClient.post('/colleges/', data),
  /** 更新学院（仅管理员） */
  update: (id: number, data: Partial<College>) => apiClient.put(`/colleges/${id}/`, data),
  /** 删除学院（仅管理员） */
  delete: (id: number) => apiClient.delete(`/colleges/${id}/`)
}

/**
 * 专业管理API
 * 
 * 接口：GET|POST|PUT|DELETE /api/majors/
 * 权限：查看-所有用户，修改-仅管理员
 * 支持按学院筛选
 */
export const majorAPI = {
  /** 获取专业列表（可按学院筛选） */
  getList: (params?: { college?: number }) => apiClient.get<PaginatedResponse<Major>>('/majors/', { params }),
  /** 获取专业详情 */
  getDetail: (id: number) => apiClient.get<Major>(`/majors/${id}/`),
  /** 创建专业（仅管理员） */
  create: (data: Omit<Major, 'id'>) => apiClient.post('/majors/', data),
  /** 更新专业（仅管理员） */
  update: (id: number, data: Partial<Major>) => apiClient.put(`/majors/${id}/`, data),
  /** 删除专业（仅管理员） */
  delete: (id: number) => apiClient.delete(`/majors/${id}/`)
}

/**
 * 班级管理API
 * 
 * 接口：GET|POST|PUT|DELETE /api/classes/
 * 权限：查看-所有用户，修改-仅管理员
 * 支持按专业筛选
 */
export const classesAPI = {
  /** 获取班级列表（可按专业筛选） */
  getList: (params?: { major?: number }) => apiClient.get<PaginatedResponse<Classes>>('/classes/', { params }),
  /** 获取班级详情 */
  getDetail: (id: number) => apiClient.get<Classes>(`/classes/${id}/`),
  /** 创建班级（仅管理员） */
  create: (data: Omit<Classes, 'id'>) => apiClient.post('/classes/', data),
  /** 更新班级（仅管理员） */
  update: (id: number, data: Partial<Classes>) => apiClient.put(`/classes/${id}/`, data),
  /** 删除班级（仅管理员） */
  delete: (id: number) => apiClient.delete(`/classes/${id}/`)
}

/**
 * 课程管理API
 * 
 * 接口：GET|POST|PUT|DELETE /api/courses/
 * 权限：查看-所有用户，修改-仅管理员
 */
export const courseAPI = {
  /** 获取课程列表 */
  getList: (params?: any) => apiClient.get<PaginatedResponse<Course>>('/courses/', { params }),
  /** 获取课程详情 */
  getDetail: (id: number) => apiClient.get<Course>(`/courses/${id}/`),
  /** 创建课程（仅管理员） */
  create: (data: Omit<Course, 'id'>) => apiClient.post('/courses/', data),
  /** 更新课程（仅管理员） */
  update: (id: number, data: Partial<Course>) => apiClient.put(`/courses/${id}/`, data),
  /** 删除课程（仅管理员） */
  delete: (id: number) => apiClient.delete(`/courses/${id}/`),
  /** 从成绩数据同步课程 */
  syncFromGrades: () => apiClient.post('/courses/sync_from_grades/')
}

/**
 * 处分管理API
 * 
 * 接口：GET|POST|PUT|DELETE /api/punishments/
 * 权限：查看-所有用户，创建/修改-仅教师及以上
 * 支持按学生、年份筛选
 */
export const punishAPI = {
  /** 获取处分列表（可按学生、年份筛选） */
  getList: (params?: { student?: number; time?: number }) => 
    apiClient.get<PaginatedResponse<Punish>>('/punishments/', { params }),
  /** 获取处分详情 */
  getDetail: (id: number) => apiClient.get<Punish>(`/punishments/${id}/`),
  /** 创建处分（仅教师及以上） */
  create: (data: Omit<Punish, 'id'>) => apiClient.post('/punishments/', data),
  /** 更新处分（仅教师及以上） */
  update: (id: number, data: Partial<Punish>) => apiClient.put(`/punishments/${id}/`, data),
  /** 删除处分（仅教师及以上） */
  delete: (id: number) => apiClient.delete(`/punishments/${id}/`)
}

/**
 * 处分字典API
 * 
 * 接口：GET|POST|PUT|DELETE /api/punish-dicts/
 * 权限：查看-所有用户，修改-仅管理员
 */
export const punishDictAPI = {
  /** 获取处分字典列表 */
  getList: (params?: any) => apiClient.get<PaginatedResponse<PunishDict>>('/punish-dicts/', { params }),
  /** 获取处分字典详情 */
  getDetail: (id: number) => apiClient.get<PunishDict>(`/punish-dicts/${id}/`),
  /** 创建处分字典（仅管理员） */
  create: (data: Omit<PunishDict, 'id'>) => apiClient.post('/punish-dicts/', data),
  /** 更新处分字典（仅管理员） */
  update: (id: number, data: Partial<PunishDict>) => apiClient.put(`/punish-dicts/${id}/`, data),
  /** 删除处分字典（仅管理员） */
  delete: (id: number) => apiClient.delete(`/punish-dicts/${id}/`)
}

export default {
  college: collegeAPI,
  major: majorAPI,
  classes: classesAPI,
  course: courseAPI,
  punish: punishAPI,
  punishDict: punishDictAPI
}
